package  intfns 
 
import  ( 
	"fmt"  
 
	"github.com/ChrisTrenkamp/goxpath/tree"  
	"golang.org/x/text/language"  
) 
 
func  boolean(c  tree .Ctx , args  ...tree .Result ) (tree .Result , error ) { 
	if  b , ok  := args [0 ].(tree .IsBool ); ok  { 
		return  b .Bool (), nil  
	} 
 
	return  nil , fmt .Errorf ("Cannot convert object to a boolean" ) 
} 
 
func  not(c  tree .Ctx , args  ...tree .Result ) (tree .Result , error ) { 
	b , ok  := args [0 ].(tree .IsBool ) 
	if  !ok  { 
		return  nil , fmt .Errorf ("Cannot convert object to a boolean" ) 
	} 
	return  !b .Bool (), nil  
} 
 
func  _true(c  tree .Ctx , args  ...tree .Result ) (tree .Result , error ) { 
	return  tree .Bool (true ), nil  
} 
 
func  _false(c  tree .Ctx , args  ...tree .Result ) (tree .Result , error ) { 
	return  tree .Bool (false ), nil  
} 
 
func  lang(c  tree .Ctx , args  ...tree .Result ) (tree .Result , error ) { 
	lStr  := args [0 ].String () 
 
	var  n  tree .Elem  
 
	for  _ , i  := range  c .NodeSet  { 
		if  i .GetNodeType () == tree .NtElem  { 
			n  = i .(tree .Elem ) 
		} else  { 
			n  = i .GetParent () 
		} 
 
		for  n .GetNodeType () != tree .NtRoot  { 
			if  attr , ok  := tree .GetAttribute (n , "lang" , tree .XMLSpace ); ok  { 
				return  checkLang (lStr , attr .Value ), nil  
			} 
			n  = n .GetParent () 
		} 
	} 
 
	return  tree .Bool (false ), nil  
} 
 
func  checkLang(srcStr , targStr  string ) tree .Bool  { 
	srcLang  := language .Make (srcStr ) 
	srcRegion , srcRegionConf  := srcLang .Region () 
 
	targLang  := language .Make (targStr ) 
	targRegion , targRegionConf  := targLang .Region () 
 
	if  srcRegionConf  == language .Exact  && targRegionConf  != language .Exact  { 
		return  tree .Bool (false ) 
	} 
 
	if  srcRegion  != targRegion  && srcRegionConf  == language .Exact  && targRegionConf  == language .Exact  { 
		return  tree .Bool (false ) 
	} 
 
	_ , _ , conf  := language .NewMatcher ([]language .Tag {srcLang }).Match (targLang ) 
	return  tree .Bool (conf  >= language .High ) 
} 
  
The pages are generated with Golds   v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds  is a Go 101  project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1  (reachable from the left QR code) to get the latest news of Golds .